// 1. 实例化
// 2. 请求拦截器 响应拦截器
// 3. 封装一个单独的函数 (一般会做)

import axios from 'axios'

// 实例化
const instance = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net/',
  timeout: 5000
})

// 请求拦截器
// 1. 携带token
instance.interceptors.request.use(config => {
  return config
}, e => Promise.reject(e))

// 响应拦截器
// 1. token失效  跳回登录页
// 2. 简化数据获取 response.data  当后端不是以200-300当成接口成功的标识 而是以一个自定义字段
// 需要前端手动抛出错误
instance.interceptors.response.use(
  // http状态 200 - 300
  (response) => {
    // const { success, message } = response.data
    // if (success) {
    //   return response.data
    // } else {
    //   return Promise.reject(message)
    // }
    return response.data
  },
  // 不在 200 - 300
  (error) => {
    return Promise.reject(error)
  }
)

// 封装一个函数
// 为了api模块服务  方便使用接口函数的时候 可以不管当前是get请求还是post请求 统一参数传入

/**
 * @description:
 * @param {*} url 请求地址
 * @param {*} method  请求方法 get/post
 * @param {*} reqData 请求参数 必须是一个对象
 * @return {*}
 */
export default function createAPI (url, method, reqData) {
  return instance({
    url,
    method,
    [method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
  })
}

// createAPI('url', 'get', data).then(res => {})
